2007年02月22日
川俣晶の縁側ソフトウェア技術雑記 total 5606 count

WinFormsのControl.Invoke メソッドでオブジェクトの配列のみを引数に渡すと実行時エラーになる問題

Written By: 川俣 晶連絡先

 余裕がないので、遭遇した現象のメモだけ。

 WinFormsのControl.Invoke メソッドでオブジェクトの配列のみを引数に渡すと実行時エラーになってしまいました。

 環境はVisuatl Studio 2005SP1上のC#です。

上手く行かない例 §

private delegate void shopBuyMenuInvoker(Item[] sellingItems);

……

formMain.Invoke((shopBuyMenuInvoker)delegate(Item[] sellingItems0)

{

formMain.ShopBuyMenu(sellingItems0);

}, sellingItems);

上手く行く例 (ダミー引数を追加) §

private delegate void shopBuyMenuInvoker(object dummy, Item[] sellingItems);

……

formMain.Invoke((shopBuyMenuInvoker)delegate(object dummy, Item[] sellingItems0)

{

formMain.ShopBuyMenu(sellingItems0);

}, null, sellingItems);

感想 §

 public Object Invoke (Delegate method,params Object[] args)の引数argsとの混同が起きているのでしょうか?

 ともかく、Invoke+匿名メソッドの組み合わせは罠が多い感じです。

 なぜ起こるのか、適切な対処法が何かはまだ分かっていませんが、時間がないのでとりあえず、遭遇現象のメモだけ。